/*******************************************************************************
 * Copyright 2010 Prometheus Consulting
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package nz.co.senanque.validationengine;

import java.util.List;

import nz.co.senanque.validationengine.choicelists.ChoiceBase;
import nz.co.senanque.validationengine.metadata.PropertyMetadataImpl;

/**
 * 
 * Stores metadata foe the field. Some of the metadata is dynamic so there is one of these for each monitored field instance.
 * 
 * @author Roger Parkinson
 * @version $Revision: 1.10 $
 */
public class FieldMetadata
{

    private final ProxyField m_proxyField;

    private final PropertyMetadataImpl m_propertyMetadata;

    public FieldMetadata(final ProxyField fieldProxyObject,
            final PropertyMetadataImpl propertyMetadata)
    {
        m_proxyField = fieldProxyObject;
        m_propertyMetadata = propertyMetadata;
        if (m_propertyMetadata == null)
        {
            throw new NullPointerException("m_propertyMetadata is null");
        }
    }

    public String getDescription()
    {
        return m_propertyMetadata.getDescription();
    }

    public String getLabelName()
    {
        return m_propertyMetadata.getLabelName();
    }

    public String getName()
    {
        return m_propertyMetadata.getName();
    }

    public boolean isReadOnly()
    {
        return m_proxyField == null ? false : m_proxyField.isReadOnly();
    }

    public boolean isRequired()
    {
        return m_proxyField == null ? false : m_proxyField.isRequired();
    }

    public boolean isActive()
    {
        return m_proxyField == null ? true : !(m_proxyField.isInActive());
    }

    public List<ChoiceBase> getChoiceList()
    {
        return m_proxyField == null ? m_propertyMetadata.getChoiceList()
                : m_proxyField.getChoiceList();

    }

}
